package com.tm.media.utils.utils;

import com.sun.mail.util.MailSSLSocketFactory;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.util.Date;
import java.util.Properties;

/**
 * @program: program
 * @Date: 2020/12/16 19:26
 * @Author: Mr.SU
 * @Description:
 */
public class MailStmpSend {

    /**
     * @Description: 网易163邮箱，发送邮件
     * @param: "[to, text, title]"
     * @Return: boolean
     * @Author: supenghui
     * @Date: 2020/12/16 16:54
     */
    public void sendMail(String to, String text, String title) throws Exception {

        String from = "ly953027753@163.com"; // 发件人邮箱地址
        String user = "ly953027753@163.com"; // 发件人称号，同邮箱地址
        String password = "ELVVFRGFWXNSEHMC"; // 发件人邮箱客户端授权码

        // 一、创建参数配置, 用于连接邮件服务器的参数配置
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", "smtp.163.com"); // 设置发送邮件的邮件服务器的属性（这里使用网易的smtp服务器）
        props.put("mail.smtp.host", "smtp.163.com");
        props.put("mail.smtp.auth", "true"); // 需要经过授权，也就是用户名和密码的校验，这样才能通过验证（一定要有这一条）

        // 二、根据配置创建会话对象, 用于和邮件服务器交互
        Session session = Session.getDefaultInstance(props);
        session.setDebug(true); // true 在控制台（console)上看到发送邮件的过程

        // 三、 创建一封复杂邮件（文本+附件）

        try {
            // 3.1. 创建邮件对象
            MimeMessage message = new MimeMessage(session); // 加载发件人地址

            // 3.2. From: 发件人
            message.setFrom(new InternetAddress(from));

            // 3.3. To: 收件人（可以增加多个收件人）
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 加载收件人地址

            // 3.4. To: 收件人（可以增加多个抄送）
            message.addRecipient(Message.RecipientType.CC, new InternetAddress(to)); // 加载抄件人地址

            // 3.5. Subject: 邮件主题
            message.setSubject(title); // 加载标题

            // 3.6. 邮件内容
            MimeMultipart multipart = new MimeMultipart(); // 向multipart对象中添加邮件的各个部分内容，包括文本内容和附件
            MimeBodyPart contentPart = new MimeBodyPart(); // 设置邮件的文本内容
            contentPart.setContent(text, "text/html;charset=utf-8");
            multipart.addBodyPart(contentPart);

            // 3.7. 邮件附件
          //  String attPath = "D:\\data\\ftpUpload\\2020\\12\\10\\盖章指令文件.zip";
           // MimeBodyPart attachment = new MimeBodyPart();
         //   DataHandler dh = new DataHandler(new FileDataSource(attPath)); // 读取本地文件
         //   attachment.setDataHandler(dh); // 将附件数据添加到“节点”
          ///  attachment.setFileName(MimeUtility.encodeText(dh.getName())); // 设置附件的文件名（需要编码）
          //  multipart.addBodyPart(attachment);

            multipart.setSubType("mixed"); // 混合关系

            // 3.8. 设置整个邮件的关系（将最终的混合“节点”作为邮件的内容添加到邮件对象）
            message.setContent(multipart);

            // 3.9. 设置发件时间
            message.setSentDate(new Date());

            // 3.10. 保存上面的所有设置
            message.saveChanges(); // 保存变化

            // 四、 根据 Session 获取邮件传输对象
            Transport transport = session.getTransport("smtp");

            // 五、 使用 邮箱账号 和 授权码 连接邮件服务器
            transport.connect("smtp.163.com", user, password);

            // 六、 发送邮件,
            transport.sendMessage(message, message.getAllRecipients());

            // 七、 关闭连接
            transport.close();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

